package com.dims_hsrc.data.mapper;

import com.dims_hsrc.data.domain.DataKnowledgeMapping;
import com.dims_hsrc.data.domain.DataKnowledgeMappingResult;

import java.util.List;
import java.util.Map;

/**
 * 知识映射 Mapper接口
 * 
 * @author 赵浩然
 */
public interface DataKnowledgeMappingMapper {
    /**
     * 查询知识映射
     *
     * @param id 知识映射主键
     * @return 知识映射
     */
    public DataKnowledgeMapping getOne(String id);

    /**
     * 查询知识映射列表
     *
     * @param mapping 知识映射
     * @return 知识映射集合
     */
    public List<DataKnowledgeMapping> list(DataKnowledgeMapping mapping);

    /**
     * 新增知识映射
     *
     * @param mapping 知识映射
     * @return 结果
     */
    public int add(DataKnowledgeMapping mapping);

    /**
     * 修改知识映射
     *
     * @param mapping 知识映射
     * @return 结果
     */
    public int update(DataKnowledgeMapping mapping);

    /**
     * 删除知识映射
     *
     * @param id 知识映射主键
     * @return 结果
     */
    public int del(String id);

    /**
     * 批量删除知识映射
     *
     * @param ids 需要删除的数据主键集合
     * @return 结果
     */
    public int remove(String[] ids);
    
    /**
     * 根据需求选项ID查询映射列表
     *
     * @param doid 需求选项ID
     * @return 映射集合
     */
    public List<DataKnowledgeMapping> getByDemandOptionId(String doid);
    
    /**
     * 根据指标选项ID查询映射列表
     *
     * @param ioid 指标选项ID
     * @return 映射集合
     */
    public List<DataKnowledgeMapping> getByIndicatorOptionId(String ioid);
    
    /**
     * 根据结构ID获取所有知识映射
     *
     * @param sid 结构ID
     * @return 映射列表
     */
    public List<DataKnowledgeMappingResult> getKnowledgeMappingsByStructId(String sid);
    
    /**
     * 根据结构ID和需求ID获取需求选项
     *
     * @param params 包含sid和did的参数Map
     * @return 需求选项列表
     */
    public List<Map<String, Object>> getDemandOptionsBySidAndDid(Map<String, Object> params);
    
    /**
     * 根据结构ID和技术指标ID获取技术指标选项
     *
     * @param params 包含sid和iid的参数Map
     * @return 技术指标选项列表
     */
    public List<Map<String, Object>> getIndicatorOptionsBySidAndIid(Map<String, Object> params);
    
    /**
     * 根据结构ID获取所有选项型或范围型需求
     *
     * @param sid 结构ID
     * @return 需求列表
     */
    public List<Map<String, Object>> getOptionOrRangeDemandsBySid(String sid);
    
    /**
     * 根据结构ID获取所有选项型技术指标
     *
     * @param sid 结构ID
     * @return 技术指标列表
     */
    public List<Map<String, Object>> getOptionIndicatorsBySid(String sid);
    
    /**
     * 检查映射是否已存在
     *
     * @param params 包含映射参数的Map
     * @return 存在的数量
     */
    public int checkMappingExists(Map<String, Object> params);
    
    /**
     * 批量添加知识映射
     *
     * @param mappingList 知识映射列表
     * @return 结果
     */
    public int batchAdd(List<DataKnowledgeMapping> mappingList);
    
    /**
     * 根据需求ID删除知识映射
     *
     * @param did 需求ID
     * @return 结果
     */
    public int removeByDemandId(String did);
    
    /**
     * 根据指标ID删除知识映射
     *
     * @param iid 指标ID
     * @return 结果
     */
    public int removeByIndicatorId(String iid);
    
    /**
     * 根据结构ID删除知识映射
     *
     * @param sid 结构ID
     * @return 结果
     */
    public int removeByStructId(String sid);

    /**
     * 根据需求选项ID查找已映射的技术指标
     *
     * @param doid 需求选项ID
     * @return 已映射的技术指标详细信息列表
     */
    public List<Map<String, Object>> getIndicatorMappingsByDemandId(String doid);
    
    /**
     * 根据技术指标选项ID查找已映射的需求
     *
     * @param ioid 技术指标选项ID
     * @return 已映射的需求详细信息列表
     */
    public List<Map<String, Object>> getDemandMappingsByIndicatorId(String ioid);
    
    /**
     * 根据结构ID获取知识映射结果
     *
     * @param sid 结构ID
     * @return 知识映射结果列表
     */
    public List<DataKnowledgeMappingResult> getKnowledgeMappingResultsBySid(String sid);

    /**
     * 根据需求选项ID和指标选项ID获取映射关系
     *
     * @param params 包含doid和ioid的参数Map
     * @return 映射关系列表
     */
    public List<DataKnowledgeMappingResult> getMappingsByDemandAndIndicator(Map<String, Object> params);

    /**
     * 根据结构ID、需求ID和指标ID获取知识映射
     *
     * @param params 包含sid、did和iid的参数Map
     * @return 知识映射结果列表
     */
    public List<DataKnowledgeMappingResult> getKnowledgeMappingsByStructAndDemandAndIndicator(Map<String, Object> params);

    /**
     * 根据需求选项ID获取知识映射结果列表
     * 
     * @param doid 需求选项ID
     * @return 知识映射结果列表
     */
    public List<DataKnowledgeMappingResult> getKnowledgeMappingResultsByDoid(String doid);
} 